#if !defined(_SCOMPLEXVALUE_H)
#define _SCOMPLEXVALUE_H

#include "SValue.h"
#include "TypeDescriptor.h"

/**
 *   The abstract base class to store complex type variables.
 *   A TypeDescriptor object contains the definition of the complex type.
 */
class DECLARATION_DLL SComplexValue : public SValue
{
	public:

		/** Returns false because this variable is of complex type. */
		virtual bool IsSimpleType() const
		{
			return false;
		}

		/** Returns true because this variable is of complex type. */
		virtual bool IsComplexType() const
		{
			return true;
		}

		/**
		 * Returns a string representation of the value.
		 */
		virtual string ToString()
		{
			return SValue::ToString();
		}

		/**
		 * Returns a string representation of the value in a specific format.
		 */
		virtual string ToString(string format)
		{
			return SValue::ToString(format);
		}

		/**
		 *   Get the type descriptor.
		 */
		virtual TypeDescriptorSp GetTypeDescriptor() = 0;

};

#endif  //_SCOMPLEXVALUE_H
